class Book:
    """
    A class representing a book with its basic attributes.
    """
    
    def __init__(self, title, publisher, author, year, book_type):
        """
        Constructor for the Book class.
        
        Args:
            title (str): The title of the book
            publisher (str): The publisher of the book
            author (str): The author of the book
            year (int): The year of publication
            book_type (str): The type/genre of the book (e.g., Fiction, Science, etc.)
        """
        self._title = title
        self._publisher = publisher
        self._author = author
        self._year = year
        self._type = book_type
    
    # Getters
    def get_title(self):
        return self._title
    
    def get_publisher(self):
        return self._publisher
    
    def get_author(self):
        return self._author
    
    def get_year(self):
        return self._year
    
    def get_type(self):
        return self._type
    
    # Setters
    def set_title(self, title):
        self._title = title
    
    def set_publisher(self, publisher):
        self._publisher = publisher
    
    def set_author(self, author):
        self._author = author
    
    def set_year(self, year):
        if year > 0:
            self._year = year
        else:
            print("Invalid year")
    
    def set_type(self, book_type):
        self._type = book_type
    
    # Other methods
    def display_info(self):
        """Display all information about the book."""
        print(f"Title: {self._title}")
        print(f"Author: {self._author}")
        print(f"Publisher: {self._publisher}")
        print(f"Year: {self._year}")
        print(f"Type: {self._type}")
    
    def __str__(self):
        """String representation of the book."""
        return f"'{self._title}' by {self._author} ({self._year})"
    
    def __repr__(self):
        """Official representation of the book."""
        return f"Book('{self._title}', '{self._publisher}', '{self._author}', {self._year}, '{self._type}')"